
using System;
using System.Text;
using LastFMGenNHibernate.CEN;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Criterion;
using NHibernate.Exceptions;
using LastFMGenNHibernate.EN.LastFM;

namespace LastFMGenNHibernate.CAD.LastFM
{
        public partial class CancionCAD : BasicCAD, ICancionCAD
        {
        public CancionCAD() : base ()
        {
        }

        public CancionCAD(ISession sessionAux) : base (sessionAux)
        {
        }



        public CancionEN ReadOIDDefault (int id)
        {
                CancionEN cancionEN = null;

                try
                {
                        SesssionInitializeTransaction ();
                        cancionEN = (CancionEN)session.Load (typeof(CancionEN),
                                id

                                );
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in CancionCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }

                return cancionEN;
        }


        public int New_ (CancionEN cancion)
        {
                try
                {
                        SesssionInitializeTransaction ();
                        if (cancion.Album != null) {
                                cancion.Album = (LastFMGenNHibernate.EN.LastFM.AlbumEN)session.Load (typeof(LastFMGenNHibernate.EN.LastFM.AlbumEN), cancion.Album.Id);
                        }
                        if (cancion.Artista != null) {
                                cancion.Artista = (LastFMGenNHibernate.EN.LastFM.ArtistaEN)session.Load (typeof(LastFMGenNHibernate.EN.LastFM.ArtistaEN), cancion.Artista.Id);
                        }
                        if (cancion.UsuarioRegistrado != null) {
                                cancion.UsuarioRegistrado = (LastFMGenNHibernate.EN.LastFM.UsuarioRegistradoEN)session.Load (typeof(LastFMGenNHibernate.EN.LastFM.UsuarioRegistradoEN), cancion.UsuarioRegistrado.Id);
                        }
                        if (cancion.UsuarioRegistrado_0 != null) {
                                cancion.UsuarioRegistrado_0 = (LastFMGenNHibernate.EN.LastFM.UsuarioRegistradoEN)session.Load (typeof(LastFMGenNHibernate.EN.LastFM.UsuarioRegistradoEN), cancion.UsuarioRegistrado_0.Id);
                        }

                        session.Save (cancion);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in CancionCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }

                return cancion.Id;
        }

        public void Destroy (int id)
        {
                try
                {
                        SesssionInitializeTransaction ();
                        CancionEN cancionEN = (CancionEN)session.Load (typeof(CancionEN),
                                id

                                );
                        session.Delete (cancionEN);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in CancionCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }
        }

        public void Modify (CancionEN cancion)
        {
                try
                {
                        SesssionInitializeTransaction ();
                        CancionEN cancionEN = (CancionEN)session.Load (typeof(CancionEN), cancion.Id);

                        cancionEN.Nombre = cancion.Nombre;


                        cancionEN.Rating = cancion.Rating;


                        cancionEN.Reproducciones = cancion.Reproducciones;


                        cancionEN.Popular = cancion.Popular;


                        cancionEN.Etiqueta = cancion.Etiqueta;

                        session.Update (cancionEN);
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in CancionCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }
        }
        public System.Collections.Generic.IList<CancionEN> DevolverCanciones (int first, int size)
        {
                System.Collections.Generic.IList<CancionEN> result = null;
                try
                {
                        SesssionInitializeTransaction ();
                        if (size > 0)
                                result = session.CreateCriteria (typeof(CancionEN)).
                                         SetFirstResult (first).SetMaxResults (size).List<CancionEN>();
                        else
                                result = session.CreateCriteria (typeof(CancionEN)).List<CancionEN>();
                        SessionCommit ();
                }

                catch (Exception ex) {
                        SessionRollBack ();
                        if (ex is ModelException)
                                throw ex;
                        throw new DataLayerException ("Error in CancionCAD.", ex);
                }


                finally
                {
                        SessionClose ();
                }

                return result;
        }
        }
}
